package com.quectel.dms.service.aiotap;

import cn.hutool.system.SystemUtil;
import com.sun.jna.*;
import com.sun.jna.ptr.ByteByReference;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;

import java.util.Arrays;
import java.util.List;

import static com.quectel.dms.service.aiotap.ThirdLibrary.*;


//继承Library，用于加载库文件
public interface AiotapLibrary extends Library {

    // linux平台下第三方依赖库要在meg_conn_sdk库前加载！
    CRYPTO CRYPTO_INSTANTCE = CRYPTO.INSTANTCE;
    SSL SSL_INSTANTCE = SSL.INSTANTCE;
    SPDLOG SPDLOG_INSTANTCE = SPDLOG.INSTANTCE;
    TARO TAR_INSTANTCE = TARO.INSTANTCE;
    MXML MXML_INSTANTCE = MXML.INSTANTCE;
    CARES CARES_INSTANTCE = CARES.INSTANTCE;
    JSONSCHEMA JSONSCHEMA_INSTANTCE = JSONSCHEMA.INSTANTCE;
    LLHTTP LLHTTP_INSTANTCE = LLHTTP.INSTANTCE;

//    AiotapLibrary INSTANTCE = (AiotapLibrary) Native.load("aiotap_sdk", AiotapLibrary.class);


    AiotapLibrary INSTANTCE = Native.load(
            SystemUtil.getOsInfo().isWindows() ? (AIOTAP_LIB_PATH + "/aiotap_sdk.dll") : (AIOTAP_LIB_PATH + "/libaiotap_sdk.so")
            , AiotapLibrary.class);


    public static final int LOG_LEVEL_TRACE = 0;
    public static final int LOG_LEVEL_DEBUG = 1;
    public static final int LOG_LEVEL_INFO = 2;
    public static final int LOG_LEVEL_WARN = 3;
    public static final int LOG_LEVEL_ERROR = 4;
    public static final int LOG_LEVEL_CRITICAL = 5;
    public static final int LOG_LEVEL_OFF = 6;

    public static final int LOG_PATH_MAX_LEN = 256;
    public static final int LOG_PREFIX_MAX_LEN = 16;
    public static final int MAX_IP_ADDRESS_SIZE = 26;

    public static final int PERSON_FACE_MAX_NUM = 3;

    public static final int DOWNLOAD_PACKET_START = 1;
    public static final int DOWNLOAD_PACKET_MID = 2;
    public static final int DOWNLOAD_PACKET_END = 3;

    public static final int ALARM_MSG_MAX_ACK_NUM = 32;

    public static final int AIOT_DEVCIE_STATUS_CONNECT = 0;
    public static final int AIOT_DEVCIE_STATUS_DISCONNECT = 1;
    public static final int AIOT_DEVCIE_STATUS_LOGOUT = 2;

    public static class MediaFrame extends Structure {
        public int type;
        public int seq;
        public int totalLength;
        public int infoLen;
        public Pointer info;
        public Pointer data;
        public Pointer[] reserved0 = new Pointer[6];
        public int[] reserved1 = new int[4];

        public static class ByReference extends MediaFrame implements Structure.ByReference {
        }
        public static class ByValue extends MediaFrame implements Structure.ByValue {
        }

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList("type", "seq", "totalLength", "infoLen", "info", "data", "reserved0", "reserved1");
        }
    }

    public static class BinDataInfo extends Structure {
        public int type;
        public int size;
        public Pointer binData;

        public static class ByReference extends BinDataInfo implements Structure.ByReference {
        }
        public static class ByValue extends BinDataInfo implements Structure.ByValue {
        }

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList("type", "size", "binData");
        }
    }

    public static class BinDataList extends Structure {
        public int binDataInfoNum;
        public BinDataInfo.ByReference binDataInfos;

        public static class ByReference extends BinDataList implements Structure.ByReference {
        }
        public static class ByValue extends BinDataList implements Structure.ByValue {
        }

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList("binDataInfoNum", "binDataInfos");
        }
    }

    public static class AlarmMsg extends Structure {
        public int infoLen;
        public Pointer jsonInfo;
        public BinDataList.ByValue data;

        public static class ByReference extends AlarmMsg implements Structure.ByReference {
        }
        public static class ByValue extends AlarmMsg implements Structure.ByValue {
        }

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList("infoLen", "jsonInfo", "data");
        }
    }

    public static class FileStream extends Structure {
        public int dataLen;
        public Pointer data;

        public static class ByReference extends FileStream implements Structure.ByReference {
        }
        public static class ByValue extends FileStream implements Structure.ByValue {
        }

        @Override
        protected List<String> getFieldOrder() {return Arrays.asList("dataLen", "data");}
    }

    public static interface FileTransProgressCb extends Callback {
        void invoke(int code, String inJsonStr, Pointer userArg);
    }

    public static interface AsyncNotifyMsgCb extends Callback {
        void invoke(int lastMsg, int result, ByteByReference resp, int dataLen, Pointer userArg);
    }

    public static interface MediaVideoStreamCb extends Callback {
        void invoke(MediaFrame.ByReference frame, Pointer userArg);
    }

    public static interface AlarmCb extends Callback {
        void invoke(AlarmMsg.ByReference alarmMsg, Pointer userArg);
    }

    public interface ConnStatusCb extends Callback {
        void invoke(Pointer handle, int status, String urlOrSsid);
    }


    public interface ConnActiveRegCb extends Callback {
        int invoke(Pointer handle, String url, String activeParam, PointerByReference outParam);
    }

    public interface ConnAppFreeCb extends Callback {
        void invoke(Pointer pointer);
    }

    public interface ConnActivateCb extends Callback {
        int invoke(String inParam, PointerByReference outParam);
    }

    public static class MegConnLogParamStruct extends Structure {
        public int async;
        public String pattern;
        public int  consoleLevel;
        public String memoryPath;
        public int  memoryLevel;
        public int memorySize;
        public int memoryCount;
        public String flashPath;
        public int flashLevel;
        public int flashSize;
        public int flashCount;
        public Pointer[] reserved0 = new Pointer[5];
        public int[] reserved1 = new int[4];
        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList("async", "pattern", "consoleLevel", "memoryPath", "memoryLevel", "memorySize",
                                 "memoryCount", "flashPath", "flashLevel", "flashSize", "flashCount", "reserved0", "reserved1");
        }

        public static class ByReference extends MegConnLogParamStruct implements Structure.ByReference {
        }

        public static class ByValue extends MegConnLogParamStruct implements Structure.ByValue {
        }
    }

    /**
     * SDK初始化参数
     */
    public static class ConnInitParamStruct extends Structure {
        public String param;
        public ConnStatusCb cliStatusCb;
        public ConnActiveRegCb regCheckCb;       // 主动模式下的回调
        public ConnAppFreeCb comFree;             // 用户自定义释放内存
        public ConnActivateCb activateCb;
        public Pointer[] reserved0 = new Pointer[15];
        public int[] reserved1 = new int[12];

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList("param", "cliStatusCb", "regCheckCb", "comFree","activateCb", "reserved0", "reserved1");
        }
    }

    public static class FaceData extends Structure {
        public int data_size;   //数据大小
        public Pointer data;    //数据

        public static class ByReference extends FaceData implements Structure.ByReference {
        }
        public static class ByValue extends FaceData implements Structure.ByValue {
        }

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList("data_size", "data");
        }
    }

    public static class PersonFace extends Structure {
        public FaceData.ByValue[] faces = new FaceData.ByValue[PERSON_FACE_MAX_NUM];

        public static class ByReference extends PersonFace implements Structure.ByReference {
        }
        public static class ByValue extends PersonFace implements Structure.ByValue {
        }

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList("faces");
        }
    }

    public interface AddPersonBatchResultCb extends Callback {
        void invoke(String result, Pointer userArg);
    }

    public static class FaceCompareParam extends Structure {
        public FaceData face1;
        public FaceData face2;

        public static class ByReference extends FaceCompareParam implements Structure.ByReference {
        }
        public static class ByValue extends FaceCompareParam implements Structure.ByValue {
        }

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList("face1", "face2");
        }
    }

    public static class FaceSearchParam extends Structure {
        public FaceData face;

        public static class ByReference extends FaceSearchParam implements Structure.ByReference {
        }
        public static class ByValue extends FaceSearchParam implements Structure.ByValue {
        }

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList("face");
        }
    }

    public static class FaceSearchBatchParam extends Structure {
        public int num;
        public FaceData.ByReference faces;
        public static class ByReference extends FaceSearchBatchParam implements Structure.ByReference {
        }

        public static class ByValue extends FaceSearchBatchParam implements Structure.ByValue {
        }

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList("num", "faces");
        }
    }

    public static class FaceFeatureParam extends Structure {
        public int num;
        public FaceData.ByReference faces;

        public static class ByReference extends FaceFeatureParam implements Structure.ByReference {
        }
        public static class ByValue extends FaceFeatureParam implements Structure.ByValue {
        }

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList("num", "faces");
        }
    }

    public interface AlgWareHouseOperaProgressCb extends Callback {
        void invoke(String inJson, Pointer userArg);
    }

    public static interface TransparentTransmissionCb extends Callback {
        void invoke(ByteByReference data, int dataLen, Pointer userArg);
    }

    /**
     * 获取SDK版本号
     *
     * @param    outJson   SDK版本信息，json格式
     * @return   参考errno
     */
    int AIOTAP_GetSdkInfo(PointerByReference outJson);

    /**
     * 设置日志参数
     *
     * @param param 日志参数结构体
     * @return 参考errno
     */
    int AIOTAP_SetLogParam(MegConnLogParamStruct param);

    /**
     * SDK初始化接口
     *
     * @param params 初始化参数
     * @return 参考errno
     */
    int AIOTAP_Init(ConnInitParamStruct params);

    /**
     * SDK反初始化接口
     *
     * @return 参考errno
     */
    int AIOTAP_Uninit();

    /**
     * 登录
     *
     * @param url       登录url，直连登录格式："协议://ip:port?user=用户名&password=密码"
     *                           比如："tcp://127.0.0.1:34567?user=test&password=123"
     *                       用户端主动登录格式："协议://ssid"
     *                           比如："active://sn12345678"
     * @param handle    句柄
     * @return 参考errno
     */
    int AIOTAP_Login(String url, PointerByReference handle);

    /**
     * 登出
     * 1.此接口只给用户端登录使用。
     *
     * @param  handle    句柄
     * @return 参考errno
     */
    int AIOTAP_Logout(Pointer handle);

    /**
     * 主动释放由 SDK申请的内存空间
     *
     * @param ptr 内存空间地址
     */
    void AIOTAP_Free(Pointer ptr);

    /**
     * 获取当前线程接口调用的错误消息
     *
     * @return  最后一次接口调用的设备应答错误消息，无消息时返回空字符串""
     */
    String AIOTAP_GetLastErrorMsg();

    /**
     * 获取设备存储管理能力集
     *
     * @param   handle      句柄
     * @param   inJson      入参预留
     * @param   outJson     能力集参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
     int AIOTAP_DeviceStorage_GetCap(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 获取硬盘或SD卡信息
     *
     * @param   handle      句柄
     * @param   inJson     入参预留
     * @param   outJson    信息参数
     * @param   timeout    超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_DeviceStorage_GetInfo(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置录像布防配置
     *
     * @param   handle     句柄
     * @param   inJson     布防配置参数
     * @param   timeout    超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_DeviceStorage_SetRecSchedule(Pointer handle, String inJson, int timeout);

    /**
     * 获取录像布防配置
     *
     * @param   handle      句柄
     * @param   inJson      入参预留
     * @param   outJson     布防配置参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_DeviceStorage_GetRecSchedule(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置录像配置
     *
     * @param   handle      句柄
     * @param   inJson      录像配置参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_DeviceStorage_SetRecordCfg(Pointer handle, String inJson, int timeout);

    /**
     * 取录像配置
     *
     * @param   handle      句柄
     * @param   inJson      入参预留
     * @param   outJson     录像配置参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_DeviceStorage_GetRecordCfg(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 获取图片
     * @param   handle   句柄
     * @param   inJson   图片参数  json格式
     * @param   imgSize  图片文件大小
     * @param   imgData  图片文件数据
     * @param   timeout  超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_DeviceStorage_GetImage(Pointer handle, String inJson, IntByReference imgSize, PointerByReference imgData, int timeout);

    /**
     * 格式化硬盘或SD卡
     * @param   handle      句柄
     * @param   inJson      格式化参数
     * @param   timeout     超时时间
     * @return  参考errno
     */
    int AIOTAP_DeviceStorage_Format(Pointer handle, String inJson, int timeout);

    /**
      获取设备报警模块能力集
     *
     * @param   handle      句柄
     * @param   inJson      获取报警模块能力集入参
     * @param   outJson     设备报警模块能力集参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
     int AIOTAP_DeviceAlarm_GetCap(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
      打开报警通道
     *
     * @param  handle        句柄
     * @param  outJson       订阅出参， json格式，仅仅一个整型的handle
     * @param  cb            报警回调
     * @param  userArg       自定义数据指针
     * @param  timeout       超时时间，单位ms
     * @return  参考errno
     */
     int AIOTAP_DeviceAlarm_SubscribeStream(Pointer handle,
                                            PointerByReference outJson,
                                            AlarmCb cb,
                                            Pointer userArg,
                                            int timeout);

    /**
      关闭报警通道
     *
     * @param   handle      句柄
     * @param   inJson      json格式，subscribe_stream 接口outJson 中的handle 字段
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
     int AIOTAP_DeviceAlarm_UnsubscribeStream(Pointer handle, String inJson, int timeout);

    /**
      设置订阅报警类型
     *
     * @param handle      句柄
     * @param inJson      json格式，参见报警类型订阅参数
     * @param timeout     超时时间，单位ms
     */
     int AIOTAP_DeviceAlarm_SubscribeAlarmType(Pointer handle, String inJson, int timeout);

    /**
      获取报警输入参数
     *
     * @param   handle      句柄
     * @param   inJson      json格式，查询条件
     * @param   outJson     报警输入参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
     int AIOTAP_DeviceAlarm_GetAlarmInputConfig(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
      设置报警输入参数
     *
     * @param   handle     句柄
     * @param   inJson     报警输入参数
     * @param   timeout    超时时间，单位ms
     * @return  参考errno
     */
     int AIOTAP_DeviceAlarm_SetAlarmInputConfig(Pointer handle, String inJson, int timeout);

    /**
      获取报警输出参数
     *
     * @param   handle      句柄
     * @param   inJson      json格式，查询条件
     * @param   outJson     报警输出参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
     int AIOTAP_DeviceAlarm_GetAlarmOutputConfig(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
      设置报警输出参数
     *
     * @param   handle     句柄
     * @param   inJson     报警输出参数
     * @param   timeout    超时时间，单位ms
     * @return  参考errno
     */
     int AIOTAP_DeviceAlarm_SetAlarmOutputConfig(Pointer handle, String inJson, int timeout);

    /**
      获取移动侦测参数
     *
     * @param   handle      句柄
     * @param   inJson      json格式，查询条件
     * @param   outJson     移动侦测参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
     int AIOTAP_DeviceAlarm_GetMotionDetectionConfig(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
      设置移动侦测参数
     *
     * @param   handle      句柄
     * @param   inJson      移动侦测参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
     int AIOTAP_DeviceAlarm_SetMotionDetectionConfig(Pointer handle, String inJson, int timeout);

    /**
      获取异常报警参数
     *
     * @param   handle      句柄
     * @param   inJson      json格式，查询条件
     * @param   outJson     异常报警参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
     int AIOTAP_DeviceAlarm_GetExceptionAlarmConfig(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
      设置异常报警参数
     *
     * @param   handle     句柄
     * @param   inJson     异常报警参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
     int AIOTAP_DeviceAlarm_SetExceptionAlarmConfig(Pointer handle, String inJson, int timeout);

    /**
      获取报警类型信息
     *
     * @param   handle     句柄
     * @param   inJson     报警类型参数
     * @param   outJson    请求应答参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
     int AIOTAP_DeviceAlarm_GetAlarmTypeInfo(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
      设置报警类型信息
     *
     * @param   handle      句柄
     * @param   inJson      设备报警类型相关信息，参见报警类型参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
     int AIOTAP_DeviceAlarm_SetAlarmTypeInfo(Pointer handle, String inJson, int timeout);

    /**
      获取报警能力集
     *
     * @param   handle      句柄
     * @param   inJson      获取报警能力集入参
     * @param   outJson     报警能力集应答参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
     int AIOTAP_DeviceAlarm_GetAlarmCap(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
      查询报警记录
     *
     * @param   handle      句柄
     * @param   inJson      查询参数
     * @param   outJson     查询结果
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
     int AIOTAP_DeviceAlarm_QueryAlarmHistory(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
      手动触发报警输出
     *
     * @param   handle      句柄
     * @param   inJson      手动触发报警输出参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
     int AIOTAP_DeviceAlarm_ManualTriggerAlarmOutput(Pointer handle, String inJson, int timeout);

    /**
      获取报警记录配置参数
     *
     * @param   handle      句柄
     * @param   inJson      获取报警记录配置参数入参
     * @param   outJson     报警记录配置参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
     int AIOTAP_DeviceAlarm_GetAlarmHistoryConfig(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
      设置报警记录配置参数
     *
     * @param   handle      句柄
     * @param   inJson      报警记录配置参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
     int AIOTAP_DeviceAlarm_SetAlarmHistoryConfig(Pointer handle, String inJson, int timeout);

    /**
      删除报警记录
     *
     * @param   handle      句柄
     * @param   inJson      删除报警记录参数
     * @param   timeout     超时参数，单位ms
     * @return  参考errno
     */
     int AIOTAP_DeviceAlarm_DeleteAlarmHistory(Pointer handle, String inJson, int timeout);

    /**
      获取网络报警源参数
     *
     * @param   handle      句柄
     * @param   inJson      设备id
     * @param   outJson     网络报警源配置参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
     int AIOTAP_DeviceAlarm_GetNetworkAlarmSourceConfig(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
      设置网络报警源参数
     *
     * @param   handle    句柄
     * @param   inJson    网络报警源配置参数
     * @param   timeout   超时时间，单位ms
     * @return  参考errno
     */
     int AIOTAP_DeviceAlarm_SetNetworkAlarmSourceConfig(Pointer handle, String inJson, int timeout);

    /**
      触发网络报警源
     *
     * @param   handle    句柄
     * @param   inJson    触发网络报警参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
     int AIOTAP_DeviceAlarm_TriggerNetworkAlarmSource(Pointer handle, String inJson, int timeout);

    /**
     * 获取设备参数管理能力集
     *
     * @param  handle  句柄
     * @param  inJson  获取设备参数能力集入参
     * @param  outJson 设备参数管理能力集
     * @param  timeout 超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_GetCap(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置网络配置
     *
     * @param  handle 句柄
     * @param  inJson 网络参数
     * @param  timeout 超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_SetNetwork(Pointer handle, String inJson, int timeout);

    /**
     * 获取网络配置
     *
     * @param  handle  句柄
     * @param  inJson  获取网络参数入参
     * @param  outJson 网络参数
     * @param  timeout  超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_GetNetwork(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置系统时间
     *
     * @param  handle 句柄
     * @param  inJson 系统时间参数
     * @param  timeout 超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_SetSystemTime(Pointer handle, String inJson, int timeout);

    /**
     * 获取系统时间
     *
     * @param  handle  句柄
     * @param  inJson  获取系统时间入参
     * @param  outJson 系统时间参数
     * @param  timeout 超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_GetSystemTime(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置NTP配置
     *
     * @param  handle 句柄
     * @param  inJson NTP配置参数
     * @param  timeout 超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_SetNTP(Pointer handle, String inJson, int timeout);

    /**
     * 获取NTP配置
     *
     * @param  handle  句柄
     * @param  inJson  获取NTP入参
     * @param  outJson NTP配置参数
     * @param  timeout  超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_GetNTP(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 测试NTP服务器
     *
     * @param  handle 句柄
     * @param  inJson NTP配置参数
     * @param  timeout  超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_TestNTP(Pointer handle, String inJson, int timeout);

    /**
     * 设置端口配置
     *
     * @param  handle 句柄
     * @param  inJson 端口参数
     * @param  timeout  超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_SetPorts(Pointer handle, String inJson, int timeout);

    /**
     * 获取端口配置
     *
     * @param  handle  句柄
     * @param  inJson  获取网络端口入参
     * @param  outJson 端口参数
     * @param  timeout  超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_GetPorts(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置UPnP配置
     *
     * @param  handle 句柄
     * @param  inJson UPnP参数
     * @param  timeout 超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_SetUPNP(Pointer handle, String inJson, int timeout);

    /**
     * 获取UPnP配置
     *
     * @param  handle  句柄
     * @param  inJson  获取UPNP入参
     * @param  outJson UPnP参数
     * @param  timeout 超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_GetUPNP(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置SNMP配置
     *
     * @param  handle 句柄
     * @param  inJson SNMP参数
     * @param  timeout  超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_SetSNMP(Pointer handle, String inJson, int timeout);

    /**
     * 获取SNMP配置
     *
     * @param  handle  句柄
     * @param  inJson  获取SNMP入参
     * @param  outJson SNMP参数
     * @param  timeout  超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_GetSNMP(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置DDNS配置
     *
     * @param  handle 句柄
     * @param  inJson DDNS参数
     * @param  timeout   超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_SetDDNS(Pointer handle, String inJson, int timeout);

    /**
     * 获取DDNS配置
     *
     * @param  handle  句柄
     * @param  inJson  获取DDNS入参
     * @param  outJson DDNS参数
     * @param  timeout   超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_GetDDNS(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置PPPOE配置
     *
     * @param  handle 句柄
     * @param  inJson PPPOE参数
     * @param  timeout  超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_SetPPPOE(Pointer handle, String inJson, int timeout);

    /**
     * 获取PPPOE配置
     *
     * @param  handle  句柄
     * @param  inJson  获取PPPOE入参
     * @param  outJson PPPOE参数
     * @param  timeout 超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_GetPPPOE(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置802.1x配置
     *
     * @param  handle 句柄
     * @param  inJson 802.1x参数
     * @param  timeout  超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_SetIEEE802_1x(Pointer handle, String inJson, int timeout);

    /**
     * 获取802.1x配置
     *
     * @param  handle  句柄
     * @param  inJson  获取8021.x入参
     * @param  outJson 802.1x参数
     * @param  timeout  超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_GetIEEE802_1x(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置SMTP配置
     *
     * @param  handle 句柄
     * @param  inJson SMTP配置参数
     * @param  timeout  超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_SetSMTP(Pointer handle, String inJson, int timeout);

    /**
     * 获取SMTP配置
     *
     * @param  handle  句柄
     * @param  inJson  获取SMTP入参
     * @param  outJson SMTP配置参数
     * @param  timeout   超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_GetSMTP(Pointer handle,String inJson, PointerByReference outJson, int timeout);

    /**
     * 测试SMTP服务器
     *
     * @param  handle 句柄
     * @param  inJson SMTP配置参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_TestSMTP(Pointer handle, String inJson, int timeout);

    /**
     * 设置ONVIF配置
     *
     * @param  handle 句柄
     * @param  inJson ONVIF参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_SetONVIF(Pointer handle, String inJson, int timeout);

    /**
     * 获取ONVIF配置
     *
     * @param  handle  句柄
     * @param  inJson  获取ONVIF入参
     * @param  outJson ONVIF参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_GetONVIF(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置GAT1400配置
     *
     * @param  handle 句柄
     * @param  inJson GAT1400参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_SetGat1400Param(Pointer handle, String inJson, int timeout);

    /**
     * 获取GAT1400配置
     *
     * @param  handle  句柄
     * @param  inJson  获取GAT1400入参
     * @param  outJson GAT1400参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_GetGat1400Param(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置GB28181配置
     *
     * @param  handle 句柄
     * @param  inJson GB28181参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_SetGb28181Param(Pointer handle, String inJson, int timeout);

    /**
     * 获取GB28181配置
     *
     * @param  handle  句柄
     * @param  inJson  获取GB28181入参
     * @param  outJson GB28181参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_GetGb28181Param(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置门磁参数
     *
     * @param  handle 句柄
     * @param  inJson 门磁参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_SetMegneticContact(Pointer handle, String inJson, int timeout);

    /**
     * 获取门磁参数
     *
     * @param  handle  句柄
     * @param  inJson  获取门磁入参
     * @param  outJson 门磁参数获取结果
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_GetMegneticContact(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置韦根参数
     *
     * @param  handle 句柄
     * @param  inJson 韦根参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_SetWeigand(Pointer handle, String inJson, int timeout);

    /**
     * 获取韦根参数
     *
     * @param  handle  句柄
     * @param  inJson  获取韦根入参
     * @param  outJson 韦根参数获取结果
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_GetWeigand(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置开关量输出门禁配置
     *
     * @param  handle 句柄
     * @param  inJson 开关量输出门禁配置参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_SetOutputSwitch(Pointer handle, String inJson, int timeout);

    /**
     * 获取开关量输出门禁配置
     *
     * @param  handle  句柄
     * @param  inJson  获取开关量输出门禁入参
     * @param  outJson 开关量输出门禁配置参数获取结果
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_GetOutputSwitch(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置图片应用策略
     *
     * @param  handle 句柄
     * @param  inJson 图片应用策略参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_SetPictureAppPolicy(Pointer handle, String inJson, int timeout);

    /**
     * 获取图片应用策略
     *
     * @param  handle  句柄
     * @param  inJson  获取图片应用策略入参
     * @param  outJson 图片应用策略参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_GetPictureAppPolicy(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 门禁控制
     *
     * @param  handle 句柄
     * @param  inJson 门禁控制参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_DoorAccessControl(Pointer handle, String inJson, int timeout);

    /**
     * 设置FTP配置
     *
     * @param  handle 句柄
     * @param  inJson FTP参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_SetFTP(Pointer handle, String inJson, int timeout);

    /**
     * 获取FTP配置
     *
     * @param  handle  句柄
     * @param  inJson  获取FTP入参
     * @param  outJson FTP参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_GetFTP(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 测试FTP服务器
     *
     * @param  handle 句柄
     * @param  inJson FTP参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_TestFTP(Pointer handle, String inJson, int timeout);

    /**
     * 设置SSH配置
     *
     * @param  handle 句柄
     * @param  inJson SSH参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_SetSSH(Pointer handle, String inJson, int timeout);

    /**
     * 获取SSH配置
     *
     * @param  handle  句柄
     * @param  inJson  获取SSH配置入参
     * @param  outJson SSH参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_GetSSH(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置GAT1400 Server配置
     *
     * @param  handle 句柄
     * @param  inJson GAT1400Server参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_SetGat1400ServerParam(Pointer handle, String inJson, int timeout);

    /**
     * 获取GAT1400 Server配置
     *
     * @param  handle  句柄
     * @param  inJson  获取GAT1400Server入参
     * @param  outJson GAT1400Server参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_GetGat1400ServerParam(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置PDNS配置
     *
     * @param  handle 句柄
     * @param  inJson PDNS参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_SetPDNS(Pointer handle, String inJson, int timeout);

    /**
     * 获取PDNS配置
     *
     * @param  handle  句柄
     * @param  inJson  获取PSND配置入参
     * @param  outJson PDNS参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceParameter_GetPDNS(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 获取rtsp url
     *
     * @param handle    句柄
     * @param inJson    获取rtsp url
     * @param outJson   rtsp urls
     * @param timeout   请求超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_DeviceParameter_GetRtspUrl(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 获取运维管理能力集
     *
     * @param  handle  句柄
     * @param  inJson  获取运维模块能力集入参
     * @param  outJson 运维管理能力集参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceMaintenance_GetCap(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 恢复设备
     *
     * @param  handle      句柄
     * @param  inJson      恢复设备入参
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceMaintenance_RestoreDevice(Pointer handle, String inJson, int timeout);

    /**
     * 重启设备
     *
     * @param  handle 句柄
     * @param  inJson 重启参数
     * @param  timeout    超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceMaintenance_RebootDevice(Pointer handle, String inJson, int timeout);

    /**
     * 查询设备信息
     *
     * @param  handle  句柄
     * @param  inJson  查询设备信息入参
     * @param  outJson 设备信息参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceMaintenance_QueryDeviceInfo(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置设备信息
     *
     * @param  handle 句柄
     * @param  inJson 设备信息参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceMaintenance_SetDeviceInfo(Pointer handle, String inJson, int timeout);

    /**
     * 一步式升级
     *
     * @param  handle 句柄
     * @param  path   升级文件路径
     * @param  inJson 设备升级参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceMaintenance_Upgrade(Pointer handle, String path, String inJson, int timeout);

    /**
     * 注册升级进度回调
     *
     * @param handle  句柄
     * @param cb      回调函数
     * @param userArg 回调函数参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceMaintenance_SetUpgradeProgressCb(Pointer handle, Callback cb, Pointer userArg, int timeout);

    /**
     * 主动查询升级进度
     *
     * @param handle 句柄
     * @param status 升级状态[0,100]
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceMaintenance_GetUpgradeStatus(Pointer handle, IntByReference status, int timeout);

    /**
     * 开始升级
     *
     * @param handle 句柄
     * @param inJson 设备升级参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceMaintenance_StartUpgrade(Pointer handle, String inJson, int timeout);

    /**
     * 传输升级文件
     *
     * @param handle   句柄
     * @param inJson   分片文件说明
     * @param buff     升级文件分片地址
     * @param buffSize 升级文件分片长度
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceMaintenance_TransferUpgrade(Pointer handle, String inJson, ByteByReference buff, int buffSize, int timeout);

    /**
     * 停止升级
     *
     * @param handle 句柄
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceMaintenance_StopUpgrade(Pointer handle, int timeout);

    /**
     * 查询日志文件
     *
     * @param handle  句柄
     * @param inJson  日志查询参数
     * @param outJson 日志查询结果
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceMaintenance_QueryLogs(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 获取自动维护参数
     *
     * @param handle  句柄
     * @param inJson  获取自动维护参数入参
     * @param outJson 自动维护参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceMaintenance_GetAutoMaintain(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置自动维护参数
     *
     * @param handle 句柄
     * @param inJson 自动维护参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceMaintenance_SetAutoMaintain(Pointer handle, String inJson, int timeout);

    /**
     * 获取在线用户
     *
     * @param handle  句柄
     * @param inJson  获取在线用户入参
     * @param outJson 在线用户信息参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceMaintenance_QueryOnlineUsers(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 获取设备运行时状态（cpu、gpu、磁盘、内存、网络等状态信息）
     *
     * @param handle    句柄
     * @param inJson    获取设备运行时状态入参
     * @param outJson   设备内部硬件状态信息参数
     * @param timeout   请求超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_DeviceMaintenance_GetDeviceRuntimeStatus(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 查询设备支持导入导出的文件类型
     *
     * @param handle    句柄
     * @param inJson    查询情趣参数
     * @param outJson   查询返回结果
     * @param timeout   请求超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_DeviceMaintenance_QuerySupportTransferFileType(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 获取当前工作模式
     *
     * @param handle    句柄
     * @param inJson    设备id
     * @param outJson   工作模式参数
     * @param timeout   请求超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_DeviceMaintenance_GetCurrentWorkMode(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置当前工作模式
     *
     * @param handle    句柄
     * @param inJson    工作模式参数
     * @param timeout   请求超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_DeviceMaintenance_SetCurrentWorkMode(Pointer handle, String inJson, int timeout);

    /**
     * 搜索文件
     *
     * @param handle    句柄
     * @param inJson    搜索文件参数
     * @param outJson   文件列表信息
     * @param timeout   请求超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_DeviceMaintenance_FileSearch(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     *打开文件
     *
     * @param handle    句柄
     * @param inJson    打开文件参数
     * @param outJson   打开文件出参，句柄、文件大小
     * @param timeout   请求超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_DeviceMaintenance_FileOpen(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 获取文件
     *
     * @param handle     句柄
     * @param inJson     获取文件参数
     * @param file       AIOTAP_FileStream_t
     * @param timeout    超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_DeviceMaintenance_FileGet(Pointer handle, String inJson, FileStream.ByReference file, int timeout);

    /**
     * 关闭文件
     *
     * @param handle     句柄
     * @param inJson     关闭文件参数
     * @param timeout    超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_DeviceMaintenance_FileClose(Pointer handle, String inJson, int timeout);

    /**
     *开始文件上传
     *
     * @param handle    句柄
     * @param inJson    开始文件上传参数
     * @param outJson   开始文件上传出参
     * @param cb        文件传输进度回调
     * @param userArg   回调用户参数
     * @param timeout   超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_DeviceMaintenance_StartFileTransfer(Pointer handle,
                                                   String inJson,
                                                   PointerByReference outJson,
                                                   FileTransProgressCb cb,
                                                   Pointer userArg,
                                                   int timeout);

    /**
     * 文件上传
     *
     * @param handle    句柄
     * @param inJson    开始文件上传出参
     * @param data      文件数据
     * @param dataLen   文件数据长度
     * @param timeout   超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_DeviceMaintenance_FileTransfer(Pointer handle, String inJson, byte[] data, int dataLen, int timeout);

    /**
     * 停止文件上传
     *
     * @param handle    句柄
     * @param inJson    开始文件上传出参
     * @param timeout   超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_DeviceMaintenance_StopFileTransfer(Pointer handle, String inJson, int timeout);

    /**
     * 删除文件
     *
     * @param handle    句柄
     * @param inJson    删除文件参数
     * @param timeout   超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_DeviceMaintenance_DeleteFile(Pointer handle, String inJson, int timeout);

    /**
     * 简单文本导出
     *
     * @param handle     句柄
     * @param inJson     简单文本导出请求参数，json格式
     * @param outJson    简单文本导出参数
     * @param buff       导出文件指针
     * @param buffSize   导出文件大小
     * @param timeout    请求超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_DeviceMaintenance_ExportSimpleFile(Pointer handle,
                                                  String inJson,
                                                  PointerByReference outJson,
                                                  PointerByReference buff,
                                                  IntByReference buffSize,
                                                  int timeout);

    /**
     * 简单文本导入
     *
     * @param handle    句柄
     * @param inJson    简单文本导入请求参数，json格式
     * @param buff      导入文件数组
     * @param buffSize  导入文件大小
     * @param timeout   请求超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_DeviceMaintenance_ImportSimpleFile(Pointer handle,
                                                  String inJson,
                                                  byte[] buff,
                                                  int buffSize,
                                                  int timeout);
    /**
     * 获取远程设备模块能力集
     *
     * @param handle  句柄
     * @param outJson 远程设备模块能力集参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceAccess_GetCap(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 获取远程设备接入能力集
     *
     * @param handle  句柄
     * @param inJson  远程设备接入能力集请求参数
     * @param outJson 远程设备接入能力集应答参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceAccess_GetDeviceCap(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 添加远程接入设备
     *
     * @param handle 句柄
     * @param inJson 远程接入设备参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceAccess_AddDevice(Pointer handle, String inJson, int timeout);

    /**
     * 删除远程设备
     *
     * @param handle 句柄
     * @param inJson 删除远程设备请求参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceAccess_RemoveDevice(Pointer handle, String inJson, int timeout);

    /**
     * 修改远程设备名
     *
     * @param handle  句柄
     * @param inJson  修改远程设备名参数
     * @param timeout 超时时间，单位ms
     * @return
     */
    int AIOTAP_DeviceAccess_SetDeviceName(Pointer handle, String inJson, int timeout);

    /**
     * 修改远程设备接入参数
     *
     * @param handle 句柄
     * @param inJson 远程设备接入参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceAccess_SetDeviceConfig(Pointer handle, String inJson, int timeout);

    /**
     * 查询远程设备接入参数
     *
     * @param handle  句柄
     * @param inJson  查询远程设备接入参数入参
     * @param outJson 远程设备接入参数列表
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceAccess_GetDeviceConfig(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 获取远程设备状态
     *
     * @param handle  句柄
     * @param inJson  获取远程设备状态参数
     * @param outJson 远程设备状态列表参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceAccess_GetDeviceState(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 获取上联设备通道信息
     *
     * @param handle  句柄
     * @param inJson  获取上联设备通道参数
     * @param outJson 获取上联设备通道结果
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceAccess_GetUpperDeviceInfo(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 远程设备发现
     *
     * @param handle   句柄
     * @param inJson   设备发现请求参数，保留字段，目前给null
     * @param outJson  远程发现结果参数
     * @param timeout  超时时间，单位毫秒
     * @return 参考errno
     */
    int AIOTAP_DeviceAccess_SearchDevice(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 查询联动规则能力集
     *
     * @param handle  句柄
     * @param inJson  规则能力集参数
     * @param outJson 联动规则能力集参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceRules_GetCap(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 添加时间计划规则
     *
     * @param handle 句柄
     * @param inJson 时间计划规则参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceRules_AddSchedulePlan(Pointer handle, String inJson, int timeout);

    /**
     * 删除时间计划规则
     *
     * @param handle 句柄
     * @param inJson 删除联动规则参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceRules_RemoveSchedulePlan(Pointer handle, String inJson, int timeout);

    /**
     * 修改时间计划规则
     *
     * @param handle 句柄
     * @param inJson 时间计划规则参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceRules_SetSchedulePlan(Pointer handle, String inJson, int timeout);

    /**
     * 查询时间计划规则
     *
     * @param handle  句柄
     * @param inJson  查询规则参数
     * @param outJson 查询时间计划规则返回参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_DeviceRules_QuerySchedulePlan(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 获取显示模块能力集
     *
     * @param handle  句柄
     * @param inJson  显示查询参数
     * @param outJson 显示模块能力集
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaDispaly_GetDispalyCap(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 获取显示输出配置
     *
     * @param handle  句柄
     * @param inJson  显示查询参数
     * @param outJson 显示配置参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaDispaly_GetDisplayCfg(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置显示输出配置
     *
     * @param handle 句柄
     * @param inJson 显示配置参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaDispaly_SetDisplayCfg(Pointer handle, String inJson, int timeout);

    /**
     * 获取用户管理能力集
     *
     * @param handle  句柄
     * @param inJson
     * @param outJson 用户管理能力集
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_UserManager_GetCap(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 添加用户
     *
     * @param handle 句柄
     * @param inJson 用户信息
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_UserManager_AddUser(Pointer handle, String inJson, int timeout);

    /**
     * 删除用户
     *
     * @param handle 句柄
     * @param inJson 删除参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_UserManager_RemoveUser(Pointer handle, String inJson, int timeout);

    /**
     * 修改用户
     *
     * @param handle 句柄
     * @param inJson 用户信息
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_UserManager_SetUser(Pointer handle, String inJson, int timeout);

    /**
     * 查询用户列表
     *
     * @param handle  句柄
     * @param inJson  查询列表参数
     * @param outJson 查询列表结果
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_UserManager_QueryUsers(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 添加用户组
     *
     * @param handle 句柄
     * @param inJson 用户组信息
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_UserManager_AddGroup(Pointer handle, String inJson, int timeout);

    /**
     * 删除用户组
     *
     * @param handle 句柄
     * @param inJson 删除参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_UserManager_RemoveGroup(Pointer handle, String inJson, int timeout);

    /**
     * 修改用户组
     *
     * @param handle 句柄
     * @param inJson 用户组信息
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_UserManager_SetGroup(Pointer handle, String inJson, int timeout);

    /**
     * 查询用户组列表
     *
     * @param handle  句柄
     * @param inJson  查询列表参数
     * @param outJson 查询列表结果
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_UserManager_QueryGroups(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 查询用户组下的用户列表
     *
     * @param handle  句柄
     * @param inJson  查询列表参数
     * @param outJson 查询列表结果
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_UserManager_QueryGroupUsers(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 查询权限列表
     *
     * @param handle  句柄
     * @param inJson  查询列表参数
     * @param outJson 查询列表结果
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_UserManager_QueryAuthList(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 获取模块能力集
     *
     * @param   handle      句柄
     * @param   inJson      获取模块能力集入参数，JSON格式
     * @param   outJson     模块能力集参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_FaceManager_GetCap(Pointer handle, String inJson, PointerByReference outJson, int timeout);


    /**
     * 创建人员分组
     *
     * @param  handle      句柄
     * @param  inJson      创建人员分组输入参数，JSON格式
     * @param  outJson     创建人员分组输出参数，JSON格式
     * @param   timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_AddGroup(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 删除人员分组
     *
     * @param  handle      句柄
     * @param  inJson      删除人员分组输入参数，JSON格式
     * @param  timeout     请求超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_RemoveGroup(Pointer handle, String inJson, int timeout);

    /**
     * 查询人员分组
     *
     * @param   handle     句柄
     * @param   inJson     查询人员分组入参数，JSON格式
     * @param   outJson    分组列表  json格式
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_FaceManager_QueryGroups(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 修改人员分组
     *
     * @param  handle      句柄
     * @param  inJson      人员分组参数，json格式
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_SetGroup(Pointer handle, String inJson, int timeout);

    /**
     * 创建人员
     * @param  handle      句柄
     * @param  inJson      人脸参数  json格式
     * @param  face        人脸数据
     * @param  outJson     创建人员结果参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_AddPerson(Pointer handle, String inJson, PersonFace face, PointerByReference outJson, int timeout);

    /**
     * 删除人员
     *
     * @param  handle      句柄
     * @param  inJson      人脸参数
     * @param  outJson     批量删除人员结果参数
     * @param  timeout     请求超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_RemovePerson(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 删除单个人员
     *
     * @param  handle  句柄
     * @param inJson   删除单个人员参数
     * @param timeout  请求超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_RemoveSinglePerson(Pointer handle, String inJson, int timeout);

    /**
     * 修改人员
     *
     * @param  handle         句柄
     * @param  inJson         人脸参数  json格式
     * @param  face           人脸数据
     * @param  outJson        修改人员结果参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_SetPerson(Pointer handle, String inJson, PersonFace face, PointerByReference outJson, int timeout);

    /**
     * 查询人员
     *
     * @param   handle      句柄
     * @param   inJson     查询参数  json格式
     * @param  outJson    人员信息  json格式
     * @param   timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_QueryPerson(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 开始批量创建人员
     *
     * @param  handle      句柄
     * @param  inJson      批量参数
     * @param  cb          批量创建人员结果函数
     * @param  outJson     批量创建结果参数
     * @param  userArg    自定义数据指针
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_StartAddPersonBatch(Pointer handle,
                                               String inJson,
                                               AddPersonBatchResultCb cb,
                                               PointerByReference outJson,
                                               Pointer userArg,
                                               int timeout);

    /**
     * 批量创建人员
     *
     * @param  handle      句柄
     * @param  inJson      人员参数
     * @param  face        人脸数据
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_AddPersonBatch(Pointer handle,
                                          String inJson,
                                          PersonFace face,
                                          int timeout);

    /**
     * 停止批量创建人员
     *
     * @param  handle      句柄
     * @param  inJson      停止批量创建参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_StopAddPersonBatch(Pointer handle,
                                              String inJson,
                                              int timeout);

    /**
     * 查询批量导入人员进度
     *
     * @param  handle      句柄
     * @param  inJson      batch_id
     * @param  outJson     批量导入人员进度参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_QueryAddPersonBatchProgress(Pointer handle,
                                                       String inJson,
                                                       PointerByReference outJson,
                                                       int timeout);

    /**
     * 绑定人员与分组
     *
     * @param  handle      句柄
     * @param  inJson      人员绑定分组参数  json格式
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_AddPersonBind(Pointer handle, String inJson, int timeout);

    /**
     * 解绑人员与分组
     *
     * @param  handle      句柄
     * @param  inJson      人员绑定分组参数  json格式
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_RemovePersonBind(Pointer handle, String inJson, int timeout);

    /**
     * 修改人员绑定分组
     *
     * @param  handle      句柄
     * @param  inJson      人员绑定分组参数  json格式
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_ModifyPersonBind(Pointer handle, String inJson, int timeout);

    /**
     * 查询分组绑定人员列表
     *
     * @param  handle    句柄
     * @param  inJson    分组绑定人员查询参数  json格式
     * @param outJson    分组绑定人员查询结果  json格式
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_QueryPersonBind(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 查询入库失败列表
     *
     * @param  handle    句柄
     * @param  inJson    查询入库失败列表输入参数  json格式
     * @param outJson    查询入库失败列表输出参数  json格式
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_QueryFailList(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 清除入库失败列表
     *
     * @param  handle      句柄
     * @param  inJson      清除入库失败列表输入参数  json格式
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_ClearFailList(Pointer handle, String inJson, int timeout);

    /**
     * 1:1人脸比较
     *
     * @param  handle       句柄
     * @param  inJson       人脸比对信息参数  json格式
     * @param  faces        人脸比对数据参数
     * @param  outJson      人脸比对结果参数
     * @param  timeout      请求超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_CompareFace(Pointer handle,
                                       String inJson,
                                       FaceCompareParam faces,
                                       PointerByReference outJson,
                                       int timeout);

    /**
     * 1:N人脸识别
     *
     * @param  handle      句柄
     * @param  inJson      人脸识别信息参数  json格式
     * @param  face        人脸识别数据参数
     * @param  outJson     人脸识别结果参数
     * @param  timeout     请求超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_SearchFace(Pointer handle,
                                      String inJson,
                                      FaceSearchParam face,
                                      PointerByReference outJson,
                                      int timeout);

    /**
     * 提取人脸特征值
     *
     * @param  handle      句柄
     * @param  inJson      提取人脸特征值参数  json格式
     * @param  faces       人脸数据参数
     * @param  outJson     提取人脸特征值结果参数
     * @param  timeout     请求超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_GetFaceFeature(Pointer handle,
                                          String inJson,
                                          FaceFeatureParam faces,
                                          PointerByReference outJson,
                                          int timeout);

    /**
     * 订阅人员动态特征值
     *
     * @param handle    句柄
     * @param inJson    订阅人员动态特征值参数
     * @param timeout   超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_SubscribeUpdateFeature(Pointer handle,
                                                  String inJson,
                                                  int timeout);

    /**
     * 退订人员动态特征值
     *
     * @param handle    句柄
     * @param inJson    退订人员动态特征值参数，JSON格式
     * @param timeout   超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_UnsubscribeUpdateFeature(Pointer handle, String inJson, int timeout);

    /**
     * 配置人员动态特征值参数
     *
     * @param handle    句柄
     * @param inJson    人员动态特征值配置参数，json格式
     * @param timeout   请求超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_SetUpdateFeatureParam(Pointer handle, String inJson, int timeout);

    /**
     * 获取人员动态特征值参数
     *
     * @param handle    句柄
     * @param inJson    获取人员动态特征值参数入参，json格式
     * @param outJson   人员动态特征值配置参数
     * @param timeout   请求超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_FaceManager_GetUpdateFeatureParam(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 批量1：N人脸识别
     *
     *
     * @param handle    句柄
     * @param inJson    获取人员动态特征值参数入参  json格式
     * @param faces     人脸批量识别数据参数
     * @param outJson   人员动态特征值配置参数
     * @param timeout   请求超时时间，单位ms
     * @return errno
     */
    int AIOTAP_FaceManager_SearchFaceBatch(Pointer handle,
                                           String inJson,
                                           FaceSearchBatchParam faces,
                                           PointerByReference outJson,
                                           int timeout);
    /**
     * 获取模块能力集
     *
     * @param  handle     句柄
     * @param  inJson
     * @param  outJson    模块能力集
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_IntelliManager_QueryCap(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 获取算法配置能力集
     *
     * @param handle     句柄
     * @param inJson
     * @param  outJson   算法配置能力集参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_IntelliManager_QueryAlgoCfgCap(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 添加布控通道
     * @param  handle                句柄
     * @param  inJson                布控参数
     * @param  timeout               超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_IntelliManager_AddMonitor(Pointer handle, String inJson, int timeout);

    /**
     * 修改布控通道
     *
     * @param  handle                句柄
     * @param  inJson                布控参数
     * @param  timeout               超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_IntelliManager_SetMonitor(Pointer handle, String inJson, int timeout);

    /**
     * 修改布控名
     *
     * @param handle  句柄
     * @param inJson  修改布控名参数
     * @param timeout 超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_IntelliManager_SetMonitorName(Pointer handle, String inJson, int timeout);

    /**
     * 查询布控通道
     *
     * @param  handle    句柄
     * @param  inJson    查询参数
     * @param  outJson   布控参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_IntelliManager_QueryMonitor(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 删除布控通道
     * @param  handle               句柄
     * @param  inJson               删除参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_IntelliManager_DeleteMonitor(Pointer handle, String inJson, int timeout);

    /**
     * 查询算法仓能力集
     * @param  handle                句柄
     * @param inJson
     * @param  outJson               算法仓能力集，JSON格式
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_IntelliManager_QueryAlgWarehouseCap(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 查询算法仓信息
     * @param  handle               句柄
     * @param  inJson               查询算法仓信息请求参数，JSON格式
     * @param  outJson              查询算法仓信息结果参数，JSON格式
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_IntelliManager_QueryAlgWarehouse(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 请求上传算法仓(server 专用接口)
     * @param  handle                句柄
     * @param  inJson                上传算法仓请求参数，JSON格式
     * @param  cb                    上传进度回调
     * @param  userArg               用户自定义数据指针
     * @param  fileId                文件句柄
     * @param  outJson               上传算法仓应答参数，JSON格式
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_IntelliManager_StartUploadAlgWarehouse(Pointer handle,
                                                      String inJson,
                                                      AlgWareHouseOperaProgressCb cb,
                                                      Pointer userArg,
                                                      IntByReference fileId,
                                                      PointerByReference outJson,
                                                      int timeout);

    /**
     * 发送算法仓文件(server 专用接口)
     * @param  handle                句柄
     * @param  fileId                文件句柄
     * @param  inJson                发送算法仓分片文件请求参数，JSON格式
     * @param  buff                  文件分片二进制数据
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_IntelliManager_TransferAlgWarehouseFile(Pointer handle,
                                                       int fileId,
                                                       String inJson,
                                                       ByteByReference buff,
                                                       int timeout);

    /**
     * 停止上传算法仓(client、server 通用接口)
     * @param  handle                句柄
     * @param  fileId                文件句柄
     * @param  inJson                请求参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_IntelliManager_StopUploadAlgWarehouse(Pointer handle, int fileId, String inJson, int timeout);

    /**
     * 上传算法仓文件（client sdk 专用接口）
     * @param  handle                句柄
     * @param  uploadFilePath        客户端本地上传文件路径
     * @param  inJson                上传算法仓请求参数，JSON格式
     * @param  progressCb            上传进度回调
     * @param  userArg               用户自定义数据指针
     * @param  fileId                文件句柄
     * @param  timeout               超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_IntelliManager_UploadAlgWarehouse(Pointer handle,
                                                 String uploadFilePath,
                                                 String inJson,
                                                 AlgWareHouseOperaProgressCb  progressCb,
                                                 Pointer userArg,
                                                 IntByReference fileId,
                                                 int timeout);

    /**
     * 获取算法卡片能力集
     *
     * @param  handle       句柄
     * @param  inJson     查询算法仓信息请求参数，JSON格式
     * @param  outJson    查询算法仓信息结果参数，JSON格式
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_IntelliManager_QueryAlgWarehouseCardCap(Pointer handle,
                                                       String inJson,
                                                       PointerByReference outJson,
                                                       int timeout);

    /**
     * 算法仓异步操作
     *
     * @param  handle       句柄
     * @param  inJson       算法仓操作请求参数，JSON格式
     * @param  progressCb   算法仓操作进度回调
     * @param  userArg      回调用户参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_IntelliManager_AlgWarehouseAsyncOpera(Pointer handle,
                                                     String inJson,
                                                     AlgWareHouseOperaProgressCb progressCb,
                                                     Pointer userArg,
                                                     int timeout);
    /**
     * 停止算法仓异步操作
     *
     * @param  handle     句柄
     * @param  inJson     停止算法仓操作请求参数，JSON格式
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_IntelliManager_StopAlgWarehouseAsyncOpera(Pointer handle, String inJson, int timeout);

    /**
     * 请求上传算法仓（client sdk 专用接口）
     * @param  handle               句柄
     * @param  inJson               上传算法仓请求参数，JSON格式
     * @param  outJson              申请上传算法仓应答参数，JSON格式（file_id）
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_IntelliManager_ApplyUploadAlgWarehouse(Pointer handle,
                                                      String inJson,
                                                      PointerByReference outJson,
                                                      int timeout);

    /**
     * 上传算法仓（client sdk 专用接口）
     * @param  handle                句柄
     * @param  uploadFilePath        客户端本地上传文件路径
     * @param  inJson                申请上传算法仓应答参数，JSON格式
     * @param  progressCb            上传进度回调
     * @param  userArg               用户自定义数据指针
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_IntelliManager_UploadAlgWarehouseFile(Pointer handle,
                                                     String uploadFilePath,
                                                     String inJson,
                                                     AlgWareHouseOperaProgressCb progressCb,
                                                     Pointer userArg,
                                                     int timeout);

    /**
     * 设置行业状态
     * @param handle    句柄
     * @param inJson    行业状态参数
     * @param timeout   请求超时时间，单位ms
     * @return
     */
    int AIOTAP_IntelliManager_SetIndustryKeyStatus(Pointer handle, String inJson, int timeout);

    /**
     * 获取行业状态
     * @param handle    句柄
     * @param inJson    查询行业状态参数
     * @param outJson   行业状态参数
     * @param timeout   请求超时时间，单位ms
     * @return
     */
    int AIOTAP_IntelliManager_GetIndustryKeyStatus(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 获取授权文件信息
     * @param handle    句柄
     * @param inJson    查询授权文件条件参数
     * @param outJson   授权文件信息参数
     * @param timeout   请求超时时间，单位ms
     * @return
     */
    int AIOTAP_IntelliManager_QueryAuthorizationDocument(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 智能数据解析（静态分析器请求）
     *
     * @param handle    句柄
     * @param inData    解析请求参数
     * @param outJson   解析应答参数
     * @param timeout   请求超时时间，单位ms
     * @return    参考errno
     */
    int AIOTAP_IntelliManager_DataParse(Pointer handle, AlarmMsg.ByReference inData, PointerByReference outJson, int timeout);

    /**
     * 设置主动登录模式参数
     * @param  handle   句柄
     * @param  inJson   JSON串中包含主动登录模式参数，可参考 /ref active_param_json 的详细描述
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_LoginManager_SetActiveParam(Pointer handle, String inJson, int timeout);

    /**
     * 获取主动登录模式参数
     * @param  handle   句柄
     * @param  inJson
     * @param  outJson  JSON串中包含主动登录模式参数，可参考 /ref active_param_json 的详细描述
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_LoginManager_QueryActiveParam(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 获取模块能力集
     *
     * @param  handle    句柄
     * @param  inJson
     * @param  outJson   模块能力集参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_LoginManager_GetCap(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置用户登录策略参数
     * @param  handle   句柄
     * @param  inJson   登录管理策略
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_LoginManager_SetLoginManagerPolicy(Pointer handle, String inJson, int timeout);

    /**
     * 获取用户登录策略参数
     * @param  handle   句柄
     * @param  inJson
     * @param  outJson  登录管理策略
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_LoginManager_GetLoginManagerPolicy(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 获取流管理模块能力集
     *
     * @param  handle      句柄
     * @param  outJson    流管理模块能力集参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaStream_GetCap(Pointer handle, PointerByReference outJson, int timeout);

    /**
     * 添加流
     *
     * @param  handle     句柄
     * @param  inJson     添加流参数信息
     * @param  outJson    添加流结果
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaStream_Add(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 删除流
     *
     * @param  handle     句柄
     * @param  inJson     删除流参数信息
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaStream_Remove(Pointer handle, String inJson, int timeout);

    /**
     * 获取流配置
     *
     * @param  handle     句柄
     * @param  outJson    流参数信息
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaStream_QueryStreamConfig(Pointer handle, PointerByReference outJson, int timeout);

    /**
     * 获取回放能力集
     *
     * @param  handle      句柄
     * @param  inJson
     * @param  outJson     回放能力集集合
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaPlayback_GetCap(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 按条件查询录像日历，查询指定的月份里哪天有录像
     * @param  handle      句柄
     * @param  inJson      查询条件，查询录像日历输入参数，json串
     * @param  outJson     查询录像日历输出参数，json串
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaPlayback_QueryRecCalendar(Pointer handle, String inJson,PointerByReference outJson, int timeout);

    /**
     * 按条件查询录像文件列表
     *
     * @param  handle     句柄
     * @param  inJson     查询条件，查询录像文件列表输入参数，json串
     * @param  outJson    查询录像文件列表输出参数，json串
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaPlayback_QueryRecFileList(Pointer handle, String inJson,PointerByReference outJson, int timeout);

    /**
     * 开始回放
     * @param  handle       句柄
     * @param  inJson       开始回放输入参数，json串
     * @param  outJson      开始回放输出参数，json串
     * @param  streamCb     流回调函数
     * @param  userArg      用户自定义数据指针
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaPlayback_StartPlayback(Pointer handle,
                                           String inJson,
                                           PointerByReference outJson,
                                           MediaVideoStreamCb streamCb,
                                           Pointer userArg,
                                           int timeout);

    /**
     * 该操作可以实现视频跳到指定位置
     *
     * @param  handle      句柄
     * @param  inJson      seek输入参数，json串
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaPlayback_Seek(Pointer handle, String inJson, int timeout);

    /**
     * 切换回放模式
     *
     * @param  handle      句柄
     * @param  inJson      切换回放模式输入参数，json串
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaPlayback_ChangeMode(Pointer handle, String inJson, int timeout);

    /**
     * 获取单帧
     *
     * @param  handle      句柄
     * @param  inJson      获取单帧输入参数，json串
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaPlayback_GetSingleFrame(Pointer handle, String inJson, int timeout);

    /**
     * 暂停回放
     *
     * @param  handle      句柄
     * @param  inJson      暂停回放输入参数，json串
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaPlayback_Pause(Pointer handle, String inJson, int timeout);

    /**
     * 恢复回放
     *
     * @param  handle      句柄
     * @param  inJson      恢复回放输入参数，json串
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaPlayback_Resume(Pointer handle, String inJson, int timeout);

    /**
     * 停止回放
     *
     * @param  handle      句柄
     * @param  inJson      停止回放输入参数，json串
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaPlayback_StopPlayback(Pointer handle, String inJson, int timeout);

    /**
     * 打开下载句柄
     *
     * @param  handle      句柄
     * @param  inJson      打开下载句柄输入参数，json串
     * @param  outJson     打开下载句柄输出参数，json串
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */

    int AIOTAP_MediaPlayback_DownloadOpen(Pointer handle, String inJson,PointerByReference outJson, int timeout);

    /**
     * 关闭下载句柄
     * @param  handle      句柄
     * @param  inJson      关闭下载句柄输入参数，json串
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */

    int AIOTAP_MediaPlayback_DownloadClose(Pointer handle, String inJson, int timeout);

    /**
     * 开始下载录像
     *
     * @param     handle      句柄
     * @param     inJson      开始下载录像输入参数，json串
     * @param     outJson     开始下载录像输出参数，json串
     * @param     cb          流回调函数
     * @param     userArg     用户自定义数据指针
     * @param     timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaPlayback_StartDownload(Pointer handle,
                                           String inJson,
                                           PointerByReference outJson,
                                           MediaVideoStreamCb cb,
                                           Pointer userArg,
                                           int timeout);

    /**
     * 停止下载录像
     *
     * @param  handle       句柄
     * @param  inJson      停止回放输入参数，json串
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaPlayback_StopDownload(Pointer handle, String inJson, int timeout);

    /**
     * 获取能力集
     *
     * @param handle  句柄
     * @param inJson
     * @param outJson 视频能力集
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaVideo_GetCap(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置编码参数
     *
     * @param handle 句柄
     * @param inJson 视频编码参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaVideo_SetEncode(Pointer handle, String inJson, int timeout);

    /**
     * 获取编码参数
     *
     * @param handle  句柄
     * @param inJson  通道信息
     * @param outJson 视频编码参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaVideo_GetEncode(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置视频图像属性参数
     *
     * @param handle 句柄
     * @param inJson 视频图像属性参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaVideo_SetImageParam(Pointer handle, String inJson, int timeout);

    /**
     * 获取视频图像属性参数
     *
     * @param handle  句柄
     * @param inJson  通道信息
     * @param outJson 视频图像属性参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaVideo_GetImageParam(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置OSD参数
     *
     * @param handle 句柄
     * @param inJson OSD参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaVideo_SetOsd(Pointer handle, String inJson, int timeout);

    /**
     * 获取OSD参数
     *
     * @param handle  句柄
     * @param inJson  通道信息
     * @param outJson OSD参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaVideo_GetOsd(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置ROI参数
     *
     * @param handle 句柄
     * @param inJson ROI参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaVideo_SetRoi(Pointer handle, String inJson, int timeout);

    /**
     * 获取ROI参数
     *
     * @param handle  句柄
     * @param inJson  通道信息
     * @param outJson ROI参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaVideo_GetRoi(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置隐私区域参数
     *
     * @param handle 句柄
     * @param inJson 隐私区域参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaVideo_SetPrivateArea(Pointer handle, String inJson, int timeout);

    /**
     * 获取隐私区域参数
     *
     * @param handle  句柄
     * @param inJson  通道信息
     * @param outJson 隐私区域参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaVideo_GetPrivateArea(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 强制关键帧
     *
     * @param handle 句柄
     * @param inJson 强制关键帧参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaVideo_ForceKeyFrame(Pointer handle, String inJson, int timeout);

    /**
     * 订阅视频流
     *
     * @param handle      句柄
     * @param inJson      订阅参数
     * @param outJson     订阅返回参数
     * @param cb          视频数据流回调
     * @param userArg     回调用户数据
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaVideo_SubscribeStream(Pointer handle,
                                          String inJson,
                                          PointerByReference outJson,
                                          MediaVideoStreamCb cb,
                                          Pointer userArg,
                                          int timeout);

    /**
     * 退订视频流
     *
     * @param handle 句柄
     * @param inJson 退订参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaVideo_UnsubscribeStream(Pointer handle, String inJson, int timeout);

    /**
     * 订阅智能帧
     *
     * @param handle      句柄
     * @param inJson      订阅参数
     * @param outJson     订阅返回参数
     * @param cb          智能帧发送回调
     * @param userArg     回调用户数据
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaVideo_SubscribeIntelligent(Pointer handle,
                                               String inJson,
                                               PointerByReference outJson,
                                               MediaVideoStreamCb cb,
                                               Pointer userArg,
                                               int timeout);

    /**
     * 退订智能帧
     *
     * @param handle 句柄
     * @param inJson 退订参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaVideo_UnsubscribeIntelligent(Pointer handle, String inJson, int timeout);

    /**
     * 获取能力集
     *
     * @param handle  句柄
     * @param inJson
     * @param outJson 音频能力集
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaAudio_GetCap(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置音频编码参数
     *
     * @param handle 句柄
     * @param inJson 音频编码参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaAudio_SetEncodeParam(Pointer handle, String inJson, int timeout);

    /**
     * 获取音频编码参数
     *
     * @param handle  句柄
     * @param inJson  通道信息
     * @param outJson 音频编码参数
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaAudio_GetEncodeParam(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 订阅音频流
     *
     * @param handle      句柄
     * @param inJson      订阅音频流参数
     * @param outJson     订阅返回参数
     * @param cb          音频数据流回调
     * @param userArg     回调用户数据
     * @param timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaAudio_SubscribeStream(Pointer handle,
                                          String inJson,
                                          PointerByReference outJson,
                                          MediaVideoStreamCb cb,
                                          Pointer userArg,
                                          int timeout);

    /**
     * 退订音频流
     *
     * @param  handle 句柄
     * @param  inJson 退订参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaAudio_UnsubscribeStream(Pointer handle, String inJson, int timeout);

    /**
     * 发送音频数据
     *
     * @param handle    句柄
     * @param inJson    发送音频数据参数 参考订阅音频流返回参数
     * @param frame     数据帧
     * @param timeout   请求超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaAudio_SendData(Pointer handle,
                                   String inJson,
                                   MediaFrame frame,
                                   int timeout);

    /**
     * 获取混合能力集
     *
     * @param  handle     句柄
     * @param  inJson
     * @param  outJson    混合能力集集合
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaMixStream_GetCap(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 订阅视频流
     *
     * @param  handle          句柄
     * @param  inJson          订阅参数
     * @param  outJson         订阅返回参数
     * @param  cb              流函数回调
     * @param  userArg        流回调用户参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaMixStream_SubscribeStream(Pointer handle,
                                              String inJson,
                                              PointerByReference outJson,
                                              MediaVideoStreamCb cb,
                                              Pointer userArg,
                                              int timeout);

    /**
     * 退订视频流
     *
     * @param   handle     句柄
     * @param   inJson     退订参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_MediaMixStream_UnsubscribeStream(Pointer handle, String inJson, int timeout);

    /**
     * 订阅图片流
     *
     * @param handle      句柄
     * @param inJson      订阅参数
     * @param outJson     订阅返回参数
     * @param cb          流函数回调
     * @param userArg    流回调用户参数
     * @param timeout     请求超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaPicture_SubscribeStream(Pointer handle,
                                            String inJson,
                                            PointerByReference outJson,
                                            MediaVideoStreamCb cb,
                                            Pointer userArg,
                                            int timeout);

    /**
     * 退订图片流
     *
     * @param handle      句柄
     * @param inJson      退订参数
     * @param timeout     请求超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaPicture_UnsubscribeStream(Pointer handle, String inJson, int timeout);

    /**
     * 查询图片流能力集
     *
     * @param handle     句柄
     * @param inJson
     * @param outJson    图片能力集参数
     * @param timeout    请求超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaPicture_QueryCap(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 获取图片流参数
     *
     * @param handle      句柄
     * @param inJson      通道号（从0开始）
     * @param outJson     图片流参数
     * @param timeout     请求超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaPicture_GetParam(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置图片流参数
     *
     * @param handle     句柄
     * @param inJson     图片能力集参数
     * @param timeout    请求超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaPicture_SetParam(Pointer handle, String inJson, int timeout);

    /**
     * 获取传感器数量
     *
     * @param   handle      句柄
     * @param   inJson
     * @param   outJson     传感器通道数及各通道下的传感器数量
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_MediaSensor_GetSensorNum(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 获取传感器能力集
     *
     * @param   handle      句柄
     * @param   inJson      查询参数
     * @param   outJson     传感器能力集
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_MediaSensor_GetSensorCap(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 获取白平衡参数
     *
     * @param   handle      句柄
     * @param   inJson      查询参数
     * @param   outJson     白平衡参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_MediaSensor_GetWhiteBalance(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置白平衡参数
     *
     * @param   handle      句柄
     * @param   inJson      白平衡参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_MediaSensor_SetWhiteBalance(Pointer handle, String inJson, int timeout);

    /**
     * 获取曝光参数
     *
     * @param   handle      句柄
     * @param   inJson      查询参数
     * @param   outJson     曝光参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_MediaSensor_GetExposure(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置曝光参数
     *
     * @param   handle      句柄
     * @param   inJson      曝光参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_MediaSensor_SetExposure(Pointer handle, String inJson, int timeout);

    /**
     * 获取图像场景参数
     *
     * @param   handle      句柄
     * @param   inJson      查询参数
     * @param   outJson     图像场景参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_MediaSensor_GetImageScene(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置图像场景参数
     *
     * @param   handle      句柄
     * @param   inJson      图像场景参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_MediaSensor_SetImageScene(Pointer handle, String inJson, int timeout);

    /**
     * 获取图像风格参数
     *
     * @param   handle      句柄
     * @param   inJson      查询参数
     * @param   outJson     图像风格参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_MediaSensor_GetImageStyle(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置图像风格参数
     *
     * @param   handle      句柄
     * @param   inJson      图像风格参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_MediaSensor_SetImageStyle(Pointer handle, String inJson, int timeout);

    /**
     * 获取灯光控制参数
     *
     * @param   handle      句柄
     * @param   inJson      查询参数
     * @param   outJson     灯光控制参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_MediaSensor_GetLampCtrl(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置灯光控制参数
     *
     * @param   handle      句柄
     * @param   inJson      灯光控制参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_MediaSensor_SetLampCtrl(Pointer handle, String inJson, int timeout);

    /**
     * 获取聚焦参数
     *
     * @param   handle      句柄
     * @param   inJson      查询参数
     * @param   outJson     聚焦参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_MediaSensor_GetFocus(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置聚焦参数
     *
     * @param   handle      句柄
     * @param   inJson      聚焦参数
     * @param   timeout     超时时间，单位msv
     * @return  参考errno
     */
    int AIOTAP_MediaSensor_SetFocus(Pointer handle, String inJson, int timeout);

    /**
     * 获取日夜切换参数
     *
     * @param   handle      句柄
     * @param   inJson      查询参数
     * @param   outJson     日夜切换参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_MediaSensor_GetDayNight(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置日夜切换参数
     *
     * @param   handle      句柄
     * @param   inJson      日夜切换参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_MediaSensor_SetDayNight(Pointer handle, String inJson, int timeout);

    /**
     * 获取背光参数
     *
     * @param   handle      句柄
     * @param   inJson      查询参数
     * @param   outJson     背光参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_MediaSensor_GetBackLight(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置背光参数
     *
     * @param   handle      句柄
     * @param   inJson      背光参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_MediaSensor_SetBackLight(Pointer handle, String inJson, int timeout);

    /**
     * 获取图像增强参数
     *
     * @param   handle     句柄
     * @param   inJson     查询参数
     * @param   outJson    图像增强参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_MediaSensor_GetImageEnhance(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置图像增强参数
     *
     * @param   handle      句柄
     * @param   inJson      图像增强参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_MediaSensor_SetImageEnhance(Pointer handle,  String inJson, int timeout);

    /**
     * 获取af参数
     *
     * @param   handle      句柄
     * @param   inJson      查询参数
     * @param   outJson     af参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_MediaSensor_GetAf(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置af参数
     *
     * @param   handle      句柄
     * @param   inJson      af参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_MediaSensor_SetAf(Pointer handle, String inJson, int timeout);

    /**
     * 获取图像参数切换配置
     *
     * @param   handle      句柄
     * @param   inJson      图像参数切换配置请求参数
     * @param   outJson     图像参数切换配置参数
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_MediaSensor_GetImageSceneTransformation(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 设置图像参数切换配置
     *
     * @param  handle       句柄
     * @param  inJson      图像参数切换配置参数
     * @param   timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_MediaSensor_SetImageSceneTransformation(Pointer handle, String inJson, int timeout);

    /**
     * client端设置监听ip
     * @param   ip        指定加入到组播的本地ip，传NULL表示INADDR_ANY。
     * @return  参考errno
     */
    int AIOTAP_SearchClientSetMonitorIp(String ip);

    /**
     * client端搜索操作
     * @param  timeout        搜索超时时间，单位s。
     * @param  outJson        搜索到的devinfo json串，接口内部申请内存，外部调用完需要自行free释放。
     * @return 参考errno
     */
    int AIOTAP_SearchClientSearch(int timeout, PointerByReference outJson);

    /**
     * client端设置ip操作,该接口使用组播发送请求，
     *              接收端需要根据收到的mac地址来判断是否是修改本设备,若是点对点发送请求需要在json串中指定对端ip     
     * @param  inJson  设置ip输入的json串，包含ip地址和目标mac。可参考set devip json串示例
     * @return 参考errno
     */
    int AIOTAP_SearchClientSetDevIp(String inJson);

    /**
     * client端激活设备接口,该接口使用组播协议发送请求，
     *              接收端需要根据收到的mac地址来判断是否是修改本设备，若是点对点发送请求需要在json串中指定对端ip
     * @param   inJson  激活设备输入的json串，包含用户密码。可参考active device json串示例
     * @return  参考errno
     */
    int AIOTAP_SearchClientActiveDevice(String inJson);

    /**
     * 获取数据透传能力集
     * @param  handle      句柄
     * @param  outJson     数据透传模块能力集参数
     * @param  timeout     超时时间，单位ms
     * @return 参考errno
     */
    int AIOTAP_TransparentTransmission_GetCap(Pointer handle, PointerByReference outJson, int timeout);

    /**
     * 信令发送后等待应答信息，或则超时后返回
     *
     * @param   handle      句柄
     * @param   inData      输入数据缓存
     * @param   in_len      输入数据长度
     * @param   outData     输出数据缓存
     * @param   outLen      输出数据长度
     * @param   timeout     信念超时时间，单位毫秒
     * @return  参考errno
     */
    int AIOTAP_TransparentTransmission_Request(Pointer handle,
                                               ByteByReference inData,
                                               int in_len,
                                               PointerByReference outData,
                                               IntByReference outLen,
                                               int timeout);

    /**
     * 异步请求，信令发送后，在超时时间内回调函数中返回响应
     *
     * @param   handle      句柄
     * @param   inData      输入数据缓存
     * @param   in_len      输入数据长度
     * @param   cb          结果异步回调函数
     * @param   userArg     用户参数
     * @param   timeout     信念超时时间，单位毫秒
     * @return  参考errno
     */
    int AIOTAP_TransparentTransmission_AsyncRequest(Pointer handle,
                                                    ByteByReference inData,
                                                    int in_len,
                                                    AsyncNotifyMsgCb cb,
                                                    Pointer userArg,
                                                    int timeout);

    /**
     * 订阅流
     *
     * @param   handle      句柄
     * @param   inJson      订阅消息入参，协议透传
     * @param   outJson     订阅消息出参
     * @param   cb          消息发送成功回调
     * @param   userArg     数据流发送回调用户数据
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_TransparentTransmission_SubscribeParam(Pointer handle,
                                                      String inJson,
                                                      PointerByReference outJson,
                                                      TransparentTransmissionCb cb,
                                                      Pointer userArg,
                                                      int timeout);

    /**
     * 订阅流
     *
     * @param   handle      handle
     * @param   inJson      订阅消息入参，协议透传
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_TransparentTransmission_UnsubscribeParam(Pointer handle, String inJson, int timeout);

    /**
     * 向订阅方发送数据
     *
     * @param   handle      句柄
     * @param   inJson      订阅消息入参，协议透传
     * @param   data        待传输数据
     * @param   dataLen     待传输数据长度
     * @param   timeout     超时时间，单位ms
     * @return  参考errno
     */
    int AIOTAP_TransparentTransmission_SendData(Pointer handle,
                                                String inJson,
                                                ByteByReference data,
                                                int dataLen,
                                                int timeout);

    /**
     * OnvifClient初始化
     *
     * @return  参考errno
     */
    int AIOTAP_OnvifClientInit();

    /**
     * OnvifClient反初始化
     *
     * @return   参考errno
     */
    int AIOTAP_OnvifClientUninit();

    /**
     * Onvif设备发现绑定IP
     *
     * @param ip  传NULL表示INADDR_ANY
     * @return    参考errno
     */
    int AIOTAP_OnvifClientSearchBindIp(String ip);

    /**
     * Onvif设备发现
     *
     * @param timeout   搜索持续时间（接口将被阻塞）
     * @param devinfo_json   设备信息列表
     * @return   参考errno
     */
    int AIOTAP_OnvifClientSearch(int timeout,  PointerByReference devinfo_json);

    /**
     * 获取联动规则能力集
     *
     * @param handle    句柄
     * @param inJson    通用路由配置参数
     * @param outJson   联动规则能力集
     * @param timeout   请求超时时间，单位ms
     * @return    参考errno
     */
    int AIOTAP_TriggerRule_GetCap(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 查询联动规则
     *
     * @param handle    句柄
     * @param inJson    查询联动规则入参
     * @param outJson   联动规则参数列表
     * @param timeout   请求超时时间，单位ms
     * @return    参考errno
     */
    int AIOTAP_TriggerRule_GetRules(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 添加联动规则
     *
     * @param handle    句柄
     * @param inJson    联动规则参数
     * @param outJson   添加联动规则出参
     * @param timeout   请求超时时间，单位ms
     * @return    参考errno
     */
    int AIOTAP_TriggerRule_AddRule(Pointer handle, String inJson, PointerByReference outJson, int timeout);

    /**
     * 修改联动规则
     *
     * @param handle    句柄
     * @param inJson    联动规则参数
     * @param timeout   请求超时时间，单位ms
     * @return    参考errno
     */
    int AIOTAP_TriggerRule_SetRule(Pointer handle, String inJson, int timeout);

    /**
     * 删除联动规则
     *
     * @param handle    句柄
     * @param inJson    删除联动规则入参
     * @param timeout   请求超时时间，单位ms
     * @return    参考errno
     */
    int AIOTAP_TriggerRule_RemoveRule(Pointer handle, String inJson, int timeout);
}
